var isUpdate = false;

$(document).ready (function () {
	/**
	 * helpのマーキー表示
	 */
	$(".EditorHelp ul").liScroll();

	// メニュー
	$(".EditorMenu > legend").toggle (function (){
		$(".EditorMenu > ul").show(100);
	}, function () {
		$(".EditorMenu > ul").hide(100);
	});

	$(".EditorMenu li").mouseover (function (){
		$(this).addClass("selected");
		$(this).siblings("li").children("ul").hide(100);
		$(this).children("ul").css('top',  $(this).position().top);
		$(this).children("ul").css('left', $(this).parent("ul").outerWidth());
		$(this).children("ul").css('z-index', 1*$(this).parent("ul").css('z-index') + 1);
		$(this).children("ul").show(100);
	});
	$(".EditorMenu li").mouseout (function (){
		$(this).removeClass("selected");
	});

	// メニューのデフォルトイベントをバインド
	$(".EditorMenu #NewFile").click (function (e) {
		var Location = $(this).attr('href');
		window.location = Location + 'new';
		e.preventDefault();
	});

	$(".EditorMenu #SaveFile").click (function (e) {
		if (isUpdate) {
			$.ajax({
				'type': "POST",
				'url': $(this).attr('href') + "update?ajax=on",
				'data': $("#EditorForm").serialize(),
				'dataType': "xml",
				'success': function(xml){
					var msg = $(xml).children('response').children('message').text();
					if (msg) {
						alert(msg);
						isUpdate = false;
						$(".Editor > h2 > span").remove();
					} else {
						alert("失敗しました。");
					}
				},
				'error': function (Request, Status, e) {
					alert ("エラーが発生しました。\n Status:" + Request.statusText);
				}
			});
		}
		e.preventDefault();
	});

	$(".EditorMenu #SaveFileNew").click (function (e) {
		var editaddr = $(this).attr('href')+ "edit/";
		$.ajax({
			'type': "POST",
			'url': $(this).attr('href') + "insert?ajax=on",
			'data': $("#EditorForm").serialize(),
			'dataType': "xml",
			'success': function(xml){
				var msg = $(xml).children('response');
				alert($(msg).children('message').text());
				var newID = $(msg).children('newID').text() - 0;
				if (newID) {
					isUpdate = false;
					$(".Editor > h2 > span").remove();
					alert ('編集モードに移行します。')
					location.href= editaddr + $(msg).children('newID').text();
				}
			},
			'error': function (Request, Status, e) {
				alert ("エラーが発生しました。\n Status:" + Request.statusText);
			}
		});
		e.preventDefault();
	});

	$(".EditorMenu #ExitWithSave").click (function (e) {
		var retaddr = $(this).attr('href');
		$.ajax({
			'type': "POST",
			'url': $(this).attr('href') + "update?ajax=on",
			'data': $("#EditorForm").serialize(),
			'dataType': "xml",
			'success': function(xml){
				var msg = $(xml).children('response');
				alert($(msg).children('message').text());
				isUpdate = false;
				$(".Editor > h2 > span").remove();
				location.href= retaddr;
			},
			'error': function (Request, Status, e) {
				alert ("エラーが発生しました。\n Status:" + Request.statusText);
			}
		});
		e.preventDefault();
	});

	$(".EditorMenu #DeleteFile").click (function (e) {
		if (window.confirm('削除してもよろしいですか？')) {
			var listaddr = $(this).attr('href')+ "list";
			$.ajax({
				'type': "POST",
				'url': $(this).attr('href') + "delete?ajax=on",
				'data': $("#EditorForm").serialize(),
				'dataType': "xml",
				'success': function(xml){
					var res = $(xml).children('response');
					var datacount = $(res).children('datacount').text() - 0;
					if (datacount) {
						isUpdate = false;
						$(".Editor > h2 > span").remove();
						var msg = $(res).children('message').text();
						alert(msg);
						location.href= listaddr;
					} else {
						alert('削除に失敗しました。');
					}
				},
				'error': function (Request, Status, e) {
					alert ("エラーが発生しました。\n Status:" + Request.statusText);
				}
			});
		}
		e.preventDefault();
	});

	// 選択
	$("dd.Form > .Form").focus (function () {
		$(".Selected").removeClass('Selected');

		$(this).addClass('Selected');
		var hObj = $(this).parent().next("dd.description");
		if (!hObj.text().length) {
			$(".EditorInformation > dl.Information").empty();
			$(".EditorInformation > dl.Information").append ($(".DefInformation > dl.Information").html());
			return;
		}
		$(".EditorInformation > dl.Information").empty();
		$(".EditorInformation > dl.Information").append('<dd>' + hObj.html() + '</dd>');
	});

	$("dd.Form > .Form").change (function () {
		$().switchUpdate();
	});

	// フォームのイベントバインド(デフォルト)
	$(".select_appendable_button").click( function () {
		var Append = window.prompt ("追加する項目を入力してください。");
		if (!Append) return false;
		$(this).prev('select').prepend('<option value="'+ Append +'">'+ Append + '</option>');
		$(this).prev('select').val (Append);
		$().switchUpdate();
	});

	$(".textarea_full").keydown(function (event) {
		if(event.keyCode==9) {
			$(this).insertAtCaret("\t");
			return false;
		}
	});

	// アップロードフォームの表示
	$("dd.Form > .UploadFormSwitch").click (function (e) {
		var backDiv = $(this).next('.UploadFormBack');
		var targetDiv = $(backDiv).next('.UploadForm');
		targetDiv.css("top", $(".EditorMain").scrollTop() + 30);
		backDiv.css("opacity", 0); targetDiv.css("opacity", 0);
		backDiv.show(); targetDiv.show();
		backDiv.fadeTo("fast", 0.8); targetDiv.fadeTo("fast", 1);
		e.preventDefault();
	});

	// アップロードフォームを閉じる
	// アップロードフォームの表示
	$(".UploadForm > .UploadFormClose").click (function (e) {
		var targetDiv = $(this).parents('.UploadForm');
		var backDiv = $(targetDiv).prev('.UploadFormBack');
		targetDiv.fadeOut("fast"); backDiv.fadeOut("fast");
		e.preventDefault();
	});

	// unload時のイベントバインド
	// 結局jQueryでの実装ができなかった……。	
	window.onbeforeunload = function(event){
		if (isUpdate) {
			event = event || window.event;
			event.returnValue = "移動するとフォームの内容が失われます。";
		}
	}

	$("dd.Form > .Form:enabled:first").focus ();

});

$.fn.extend({
	/* 更新ありに変更 */
	switchUpdate: function () {
		if (!isUpdate) {
			$(".Editor > h2").append('<span>(更新)</span>');
			isUpdate = true;
		}
	},
	/* キャレット位置に文字列挿入 */
	insertAtCaret: function(v) {
		var o = this.get(0);
		o.focus();
		if (jQuery.browser.msie) {
			var r = document.selection.createRange();
			r.text = v;
			r.select();
		} else {
			var s = o.value;
			var p = o.selectionStart;
			var np = p + v.length;
			o.value = s.substr(0, p) + v + s.substr(p);
			o.setSelectionRange(np, np);
		}
	}
});
